import time
import unittest

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.firefox.service import Service
from selenium.webdriver.support.select import Select


class MyTestCaseFireFox(unittest.TestCase):
    driver = None

    @classmethod
    def setUpClass(cls) -> None:
        # 注册 驱动打开的位置
        service = Service(executable_path="../../dirver_exe/geckodriver.exe")
        # 打开浏览器  driver 代表 浏览器对象
        cls.driver = webdriver.Firefox(service=service)

    def test_by_select(self):
        """测试下拉列表框"""
        self.driver.get("http://192.168.0.152:8080/testhtml/exam/House.html")

        """
            1、在网页中想要操作 下拉列表中的 选项 ，有两种方法
                1. 通过元素定位直接点击
                2. 通过容器中的属性来点击某一个选项
        """
        # 1. 通过 定位直接点击
        # self.driver.find_element(By.XPATH, "//option[@value='w2']").click()

        # 2. 将选项所在的标签元素 定位 出来 添加到 select 容器中，使用 select 容器中支持的方法来选择 选项
        select_v = self.driver.find_element(By.NAME, "list2")
        select = Select(select_v)

        # 使用 value 的选择方式来选择选项
        select.select_by_value("w3")
        # 通过下标索引来选择   下标的起始值  从 0 开始
        select.select_by_index(0)
        # 通过标签中的 文本值来选择 选项
        select.select_by_visible_text('3000')

    def test_by_isMultiple(self):
        """判断 下拉列表框是否支持多选"""

        self.driver.get("http://192.168.0.152:8080/testhtml/exam/House.html")

        zjfw = self.driver.find_element(By.NAME, "list2")
        # 想要判断 某一个 下拉列表框是否支持多选  需要向 将 下拉列表框添加到 容器中
        select_zjfw = Select(zjfw)
        print('支持多选' if select_zjfw.is_multiple else '不支持多选')

        wylb = self.driver.find_element(By.NAME, "list1")
        select_wylb = Select(wylb)
        print('支持多选' if select_wylb.is_multiple else '不支持多选')

        # 想要 获取  list1 中 所有的选项 的 选项的名字
        print(select_wylb.all_selected_options)  # all_selected_options 获得是 被选中的选项
        print(select_wylb.options)  # options 获得是 所有的选项

        for item in select_wylb.options:
            print(item.text)  # 获得 元素 的文本值

    @classmethod
    def tearDownClass(cls) -> None:
        # cls.driver.close()  # 只会关闭一个标签页
        # cls.driver.quit()  # 直接退出浏览器 并且关闭所有的标签页
        pass


if __name__ == '__main__':
    unittest.main()
